import md5 from "@/utils/md5.js";
import { uuid } from "@/utils/common.js"

const install=(Vue,vm)=>{
    Vue.prototype.$u.http.setConfig({
        baseUrl: '', //请求域名
        loadingText: '加载中...',
        loadingTime: 800,	// 如果超过此时间，请求尚未返回，则显示一个loading，直至返回后，取消loading
        header: {
            'content-type': 'application/json;charset=UTF-8'
        },
        showLoading: true,
    });
    // 请求拦截，配置Token等参数
    Vue.prototype.$u.http.interceptor.request = (config) => {
		// 通用请求头内加入签名
		var nonceStr = uuid()
		var timeStamp = Date.parse(new Date())/1000;
		var sign = md5.md5(nonceStr + "|" + timeStamp + "|" + "2542SDF24WER42dsf88rrterfved")
		
		config.header.nonceStr = nonceStr;
		config.header.timeStamp = timeStamp;
		config.header.sign = sign;
		
		if(uni.getStorageSync('token')) {
			config.header.token = uni.getStorageSync('token');
		}

		// console.log(config)
		
        // 方式一，存放在vuex的token，假设使用了uView封装的vuex方式，见：https://uviewui.com/components/globalVariable.html
        // config.header.token = vm.token;
        // 方式二，如果没有使用uView封装的vuex方法，那么需要使用$store.state获取
        // config.header.token = vm.$store.state.token;
        // 方式三，如果token放在了globalData，通过getApp().globalData获取
        // config.header.token = getApp().globalData.username;
        // 方式四，如果token放在了Storage本地存储中，拦截是每次请求都执行的，所以哪怕您重新登录修改了Storage，下一次的请求将会是最新值
        // const token = uni.getStorageSync('token');
        // config.header.token = token;

        return config; 
    }
    //响应拦截x
    Vue.prototype.$u.http.interceptor.response = (res) => {
        // 如果把originalData设置为了true，这里得到将会是服务器返回的所有的原始数据
        // 判断可能变成了res.statueCode，或者res.data.code之类的，请打印查看结果
        if(res.code == 200) {
            // 如果把originalData设置为了true，这里return回什么，this.$u.post的then回调中就会得到什么
            return res;  
        } else if(res.code === 500){
			uni.showToast({
				title: res.message,
				icon:'none',
				duration: 1500
			});
			return res;
		} else if(res.code == 501) {
			// 登录过期
			vm.$u.toast('登录过期，请重新登录');
			setTimeout(() => {
				// 此为uView的方法，详见路由相关文档
				uni.showModal({
					title: "提示",
					content: '登录过期，是否跳转登录页面？',
					showCancel: false,
					success: confirmRes => {
						if (confirmRes.confirm) {
							uni.login({
								provider: 'weixin',
								success: (res) => {
									console.log(res)
									vm.$u.route('/pages/login/login?code=' + res.code)
								},
								fail: () => {
									uni.showToast({
										title: "微信登录授权失败",
										icon: "none"
									});
								}
							})
						}
					}
				});
			}, 500)
			return false;
		} else {
			return false
		}
    }
}

export default{
    install
}